package com.hmall.order.web;

import com.hmall.common.client.UserFeignClient;
import com.hmall.common.thread.User;
import com.hmall.common.thread.UserThreadLocal;
import com.hmall.order.pojo.Order;
import com.hmall.order.service.IOrderService;
import jdk.management.resource.internal.inst.SocketOutputStreamRMHooks;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("order")
public class OrderController {

   @Autowired
   private IOrderService orderService;

   @GetMapping("{id}")
   public Order queryOrderById(@PathVariable("id") Long orderId) {
      return orderService.getById(orderId);
   }

   @Autowired
   private UserFeignClient userFeignClient;

   /**
    * 测试拦截器和threadLocal
    */
   @GetMapping
   public void test(){
      User user = UserThreadLocal.getUser();
      System.out.println(user);

      //远程调用
      user = userFeignClient.getUser(user.getId());
      System.out.println(user);
   }


   /**
    * 需求：
    *    我们在order服务中执行自定义拦截器，并且可以把用户信息保存到当前ThreadLocal中
    *    但是我们要在order服务中通过Feign远程调用user微服务，user微服务中需要用到用户id
    *    那么，我们在用户微服务中如何获取用户id?
    *
    * 解决方案：
    *    方案一、我们可以在order微服务中调用Feign,可以把用户id作为参数传过去
    *    方案二。利用feign拦截器
    */
}
